; COMMAND-LINE: --strings-exp
(set-option :incremental true)
(set-logic SLIA)
(declare-const x String)

(push)
(assert (= "AFOOE" (str.replace_re x (re.++ (str.to_re "B") re.allchar (str.to_re "C")) "FOO")))
(assert (not (= x "AFOOE")))
(set-info :status sat)
(check-sat)
(pop)

(push)
(assert (= "FOOA" (str.replace_re x re.all "FOO")))
(set-info :status sat)
(check-sat)
(pop)

(push)
(assert (= "FOOA" (str.replace_re x (re.++ (str.to_re "A") re.all) "FOO")))
(set-info :status sat)
(check-sat)
(pop)

(push)
(assert (= "FOOA" (str.replace_re x (re.++ (str.to_re "A") re.all) "FOO")))
(assert (> (str.len x) 2))
(set-info :status unsat)
(check-sat)
(pop)

(push)
(assert (= "FOOA" (str.replace_re "A" re.all "FOO")))
(set-info :status sat)
(check-sat)
(pop)

(push)
(assert (not (= "A" (str.replace_re "A" re.none "FOO"))))
(set-info :status unsat)
(check-sat)
(pop)

(push)
(assert (= "FOO" (str.replace_re x (re.union (str.to_re "A") (str.to_re "ABC")) "FOO")))
(assert (not (= x "FOO")))
(assert (> (str.len x) 1))
(set-info :status unsat)
(check-sat)
(pop)
